/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import java.util.*;
import negocio.Alquiler;
import negocio.Cliente;
import Controladores.GestionAlquiler;
import Controladores.GestionArticulo;
import Controladores.GestionCliente;
import Controladores.GestionMovimientos;
import Controladores.GestionPromociones;
import Controladores.GestionSaldo;

/**
 */
public class Cajero {
    /*
     * loginCliente Pregunta por el Nombre de Usuario y el Pin, los concatena con un espacio y lo manda a seleccionaCliente con el
     * indice 6 de modo de operacion, este lo trata y pregunta por el cliente con el nombre de usuario y pin correspondientes. El
     * método devuelve una lista de Clientes, si está vacia es que no existe ningun cliente, si está llena lo estará de un cliente.
     */

    public static void loginCliente() {
        Cliente c = null;
        System.out.println("---Cajero---");
        do {
            String login = ObtenerTeclado.dameCadena("Introduce el Nombre de Usuario: ");
            int pin = ObtenerTeclado.dameEntero("Introduce el Pin: ");
            String s = login + " " + pin;

            c = GestionCliente.obtenerCliente(login, pin);
            if (c == null) {
                System.out.println("¡¡Nombre de Usuario o Pin incorrectos!! Intenta de nuevo..");
            } else {
                menuPrincipal(c);
            }
        } while (c == null);
    }

    public static void menuPrincipal(Cliente cliente) {


        int i = 1;

        do {
            System.out.println("---------------------------");
            System.out.println("        MENU PRINCIPAL     ");
            System.out.println("---------------------------");
            System.out.println("1. Alquiler Pelicula o Juego");
            System.out.println("2. Devolucion");
            System.out.println("3. Saldo");
            System.out.println("4. Mostrar promociones");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("introduzca una opcion: ");

            switch (i) {
                case 1:
                    menuAlquiler(cliente);
                    break;
                case 2:
                    menuDevolucion(cliente);
                    break;
                case 3:
                    menuSaldo(cliente);
                    break;
                case 4:
                    menuPromociones();
                    break;
                default:
                    break;
            }

        } while (i != 0);

    }

    private static void menuAlquiler(Cliente cliente) {
        Alquiler alq=GestionAlquiler.creaAlquiler(cliente);

        int i = 1;
        int s = 0;
        do {

            System.out.println("---------------------------");
            System.out.println("      MENU ALQUILER    ");
            System.out.println("---------------------------");
            System.out.println("1. Buscar pelicula");
            System.out.println("2. Buscar juego");
            System.out.println("3. Mostrar articulos seleccionados");
            System.out.println("4. Eliminar articulo de la lista de alquileres");
            System.out.println("5. Confirmar alquileres");
            System.out.println("6. Mostrar promociones");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 0:

                    s = ObtenerTeclado.dameEntero("Seguro que desea salir? 1. Si Cualquier otro numero. No");
                    if (s == 1) {
                        GestionAlquiler.salirSinConfirmar(alq);
                        break;
                    } else {
                        i = ObtenerTeclado.dameEntero("Introduzca una opción");
                        break;
                    }


                case 1:
                    submenuBusquedaPelicula(alq);
                    break;
                case 2:
                    submenuBusquedaJuego(alq);
                    break;
                case 3:
                    //Vamos a recorrer la lista de alquileres para ver los articulos que ha seleccionado
                    GestionAlquiler.mostrarArticulosSeleccionados(alq);
                    break;
                case 4:
                    int codigo = ObtenerTeclado.dameEntero("Introduzca el codigo del articulo a eliminar");
                    GestionAlquiler.EliminarAlquiler(alq, codigo);
                    break;
                case 5:
                    GestionAlquiler.confirmar(cliente, alq, null);
                    break;
                case 6:
                    GestionPromociones.mostrarPromocionesVigentes();
                    break;
                default:
                    break;
            }

        } while (i != 0);
    }

    private static void submenuBusquedaPelicula(Alquiler alq) {
        int i;
        do {
            System.out.println("---------------------------");
            System.out.println("      BUSQUEDA PELICULA    ");
            System.out.println("---------------------------");
            System.out.println("1. Mostrar novedades");
            System.out.println("2. Mostrar peliculas mejor valoradas");
            System.out.println("3. Busqueda por titulo");
            System.out.println("4. Busqueda por genero");
            System.out.println("5. Busqueda por año");
            System.out.println("6. Busqueda por director");
            System.out.println("7. Seleccionar pelicula");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarNovedades();
                    break;
                case 2:
                    GestionAlquiler.mostrarMejoresPeliculas();
                    break;
                case 3:
                    String titulo = ObtenerTeclado.dameCadena("Introduzca el titulo buscado");
                    GestionAlquiler.busquedaPeliculaTitulo(titulo);
                    break;
                case 4:
                    String genero;
                    GestionArticulo.mostrarGeneros();
                    do {
                        genero = ObtenerTeclado.dameCadena("Introduzca el genero buscado: ");
                    } while (GestionArticulo.comprobarGenero(genero) != 1);
                    GestionAlquiler.busquedaPeliculaGenero(genero);
                    break;
                case 5:
                    int anyo = ObtenerTeclado.dameEntero("Introduzca el año buscado");
                    GestionAlquiler.busquedaAnyo(anyo);
                    break;
                case 6:
                    String director = ObtenerTeclado.dameCadena("Introduzca el director buscado");
                    GestionAlquiler.busquedaDirector(director);
                    break;
                case 7:
                    int cod = ObtenerTeclado.dameEntero("Introduzca el codigo de la pelicula seleccionada");
                    GestionAlquiler.AddAlquiler(alq, cod);
                    //Salgo del submenu al menu de alquiler de pelicula
                    i = 0;
                    break;
                default:
                    break;
            }
        } while (i != 0);

    }

    private static void submenuBusquedaJuego(Alquiler alq) {

        int i;
        do {
            System.out.println("---------------------------");
            System.out.println("        BUSQUEDA JUEGO     ");
            System.out.println("---------------------------");
            System.out.println("1. Mostrar juegos mejor valorados");
            System.out.println("2. Busqueda por titulo");
            System.out.println("3. Busqueda por genero");
            System.out.println("4. Busqueda por soporte");
            System.out.println("5. Seleccionar juego");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarMejoresJuegos();
                    break;
                case 2:
                    String titulo = ObtenerTeclado.dameCadena("Introduzca el titulo buscado");
                    GestionAlquiler.busquedaJuegoTitulo(titulo);
                    break;
                case 3:
                    String genero;
                    GestionArticulo.mostrarGeneros();
                    do {
                        genero = ObtenerTeclado.dameCadena("Introduzca el genero buscado: ");
                    } while (GestionArticulo.comprobarGenero(genero) != 1);
                    GestionAlquiler.busquedaJuegoGenero(genero);
                    break;
                case 4:
                    String soporte;
                    GestionArticulo.mostrarSoportes();
                    do {
                        soporte = ObtenerTeclado.dameCadena("Introduzca el soporte buscado: ");
                    } while (GestionArticulo.comprobarSoporte(soporte) != 1);
                    GestionAlquiler.busquedaJuegoSoporte(soporte);
                    break;
                case 5:
                    int codigo = ObtenerTeclado.dameEntero("Introduzca el codigo del juego para alquilar");
                    GestionAlquiler.AddAlquiler(alq, codigo);
                    break;
                default:
                    break;
            }

        } while (i != 0);
    }

    private static void menuDevolucion(Cliente cliente) {
        int i;
        Alquiler alq=GestionAlquiler.obtenerAlquiler(cliente);
        do {
            System.out.println("---------------------------");
            System.out.println("          DEVOLUCION       ");
            System.out.println("---------------------------");
            System.out.println("1. Mostrar peliculas pendientes");
            System.out.println("2. Devolver pelicula seleccionada");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarArticulosPendientes(alq);
                    break;
                case 2:
                    int cod = ObtenerTeclado.dameEntero("Introduzca el codigo del alquiler");
                    GestionAlquiler.devolverArticulo(alq, cod);
                    
                    break;
                default:
                    break;
            }
        } while (i != 0);
    }

    private static void menuSaldo(Cliente cliente) {

        int j;
        float saldo;

        do {
            System.out.println("---------------------------");
            System.out.println("           SALDO           ");
            System.out.println("---------------------------");
            System.out.println("1. Mostrar Saldo");
            System.out.println("2. Recargar Saldo");
            System.out.println("0. Salir");
            j = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (j) {
                case 1:
                    GestionSaldo.mostrarSaldo(cliente);
                    break;
                case 2:
                    saldo = ObtenerTeclado.dameFloat("Introduzca cantidad a recargar");
                    GestionMovimientos.addMovimiento(cliente, saldo, "Recarga de saldo");
                    GestionSaldo.recargarSaldo(saldo, cliente);
                default:
                    break;

            }
        } while (j != 0);

    }

    public static void menuPromociones() {
        System.out.println("---------------------------");
        System.out.println("         PROMOCIONES       ");
        System.out.println("---------------------------");
        GestionPromociones.mostrarPromocionesVigentes();
    }
}
